package com.at.bigdata.spark.core.rdd.operator.action

import org.apache.spark.{SparkConf, SparkContext}

/**
 *
 * @author cdhuangchao3
 * @date 2023/3/19 9:52 PM
 */
object Spark02_RDD_reduce {

  def main(args: Array[String]): Unit = {
    // 环境准备
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)

    // TODO 算子 - 行动算子
    //    触发作业（Job）执行的方法
    //    底层调用 环境对象 的runJosb方法
    //    底层会创建 ActiveJon，并提交执行
    val rdd = sc.makeRDD(List(1, 2, 3, 4))

    val i = rdd.reduce(_ + _)
    println(i)

    // collect: 方法会将 不同分区的数据 按照分区顺序采集到Driver端内存中，形成数组
    val ints : Array[Int] = rdd.collect()
    println(ints.mkString(","))

    val cnt = rdd.count()
    println(cnt)

    println(rdd.first())

    println(rdd.take(3).mkString(","))

    val rdd1 = sc.makeRDD(List(1, 2, 3, 4))
    println(rdd1.takeOrdered(3).mkString(","))

    sc.stop()
  }

}
